package comptadub

class CompteService {

    boolean transactional = true
    
    /**
     * D = durée en heures d'une tranche de facturation, et P = prix d'une tranche.
     * Aujourd'hui D = 24 et P = 2.
     * Prix à payer = P * ArrondiEntierSuperieur((heureDeFin - heureDeDebut) / D) * nbPersonne
     **/

    def calculerMontant(Presence presence) {
        def duree = Parametre.findByNom("duree").valeur.toInteger()
        def prix = Parametre.findByNom("prix").valeur.toFloat()

        def diff = Math.abs(presence.dateDepart.time - presence.dateArrivee.time)
        def diffHeure = diff / (1000 * 60 * 60)

        presence.nbJour = Math.ceil(diffHeure / duree).toInteger()
        presence.debit = (prix * presence.nbJour * presence.nbPersonne).toFloat()
        presence.debit += (prix/2 * presence.nbJour * presence.nbEnfant).toFloat()
    }

    def definirObjet(Presence presence) {
        presence.typeLigne = TypeLigne.findByCode("pres")
        presence.objet = presence.nbPersonne + " adultes(s), " + presence.nbEnfant + " enfant(s), " + presence.nbGratuit + " gratuit(s), " + presence.nbJour + " jour(s)"
    }

    def definirObjet(Paiement paiement) {
        paiement.typeLigne = TypeLigne.findByCode("pmt")
        paiement.objet = paiement.type?.nom
    }

    def definirObjet(NoteDeFrais noteDeFrais) {
        noteDeFrais.typeLigne = TypeLigne.findByCode("ndf")
        if (noteDeFrais.numeroFacture) {
            noteDeFrais.objet = "Facture n°" + noteDeFrais.numeroFacture
        } else {
            noteDeFrais.objet = noteDeFrais.description
        }
    }

    def definirObjet(LigneCompte ligneCompte) {
        ligneCompte.typeLigne = TypeLigne.findByCode("autre")
    }
}
